package com.imooc.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

/**
 * CorsConfig: 这里类注意是为了解决跨越的问题：
 * 造成跨域的原因？不同的服务器（软件）之间的后台服务在互相访问的过程中，出现了 Cors 异常；
 * 跨域是服务器（软件）对自身的一种保护行为，避免自身服务会被任意（恶意）请求。
 * <p>
 * 如何解决跨域？ 通过后台配置，开放指定端口进行访问
 *
 * @author: ZhaoYiChen
 * @create: 2020-09-17 15:55
 **/

@Configuration
public class CorsConfig {

    public CorsConfig() {

    }

    @Bean
    public CorsFilter corsFilter() {
        //1. 添加cors配置信息【基本信息】
        CorsConfiguration config = new CorsConfiguration();
        config.addAllowedOrigin("http://localhost:8080"); //切记：不要设置为 * ，否则任何服务器都可以，当前后台应用
        config.addAllowedOrigin("http://192.168.64.38:8080");
        config.addAllowedOrigin("http://192.168.64.38");

        //1.1 设置是否发送cookie信息  指：允许前端携带cookie信息进行请求
        config.setAllowCredentials(true);

        //1.2 设置允许请求的方式 包括：get post ...
        config.addAllowedMethod("*");

        //1.3 设置允许的header 包括：各种请求头信息 ...
        config.addAllowedHeader("*");

        // 2. 为url添加路径信息  解释：请求 controller 路由时，携带 config 基本信息
        UrlBasedCorsConfigurationSource corsSource = new UrlBasedCorsConfigurationSource();
        corsSource.registerCorsConfiguration("/**", config);

        //3. 返回定义好的corsSource
        return new CorsFilter(corsSource);
    }
}
